#pragma once

#include <iostream>
#include<unistd.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<arpa/inet.h>
#include<cstring>
#include<cstdlib>

class Socket
{
public:
   static int Socketcreate()
   {
       int sock = socket(AF_INET, SOCK_STREAM, 0);
       if(sock<0)
       {
           std::cerr<<"Socket creation failed"<<std::endl;
           exit(2);
       }
       int opt = 1;
       setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
       return sock;
   }
   static void Socketbind(int &sock, int port)
   {
       struct sockaddr_in local;
       memset(&local, 0, sizeof(local));
       local.sin_family = AF_INET;
       local.sin_port = htons(port);
       local.sin_addr.s_addr = htonl(INADDR_ANY);
       socklen_t len = sizeof(local);
       if(bind(sock, (struct sockaddr*)&local, len)<0)
       {
           std::cerr<<"Bind failed"<<std::endl;
           exit(3);
       }
   }
   static void Socketlisten(int &sock, int backlog)
   {
       if(listen(sock, backlog)<0)
       {
           std::cerr<<"Listen failed"<<std::endl;
           exit(4);
       }
   }



};